/**
 * @file activite.h
 * @brief Fichier d'entête du module activite.
 *
 * @author Rachid Delory, Mamadou Keita, Florian Bernard
 */

#ifndef H_ACTIVITE_H
#define H_ACTIVITE_H

/* *********************************************************************

                       Librairies de activite                           

********************************************************************* */

#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
#include "personne.h"

/* *********************************************************************

                        Définitions de types                           

********************************************************************* */

/**
 * @enum PRINCIPAL
 * @principal boolean pour dire si l'acteur est principal ou non
 */
typedef enum {
  NON_ACT = 0,
  OUI_ACT = 1
} PRINCIPAL;

/**
 * @struct sActivite
 * @brief Structure utilisée pour la gestion des Activite
 *
 * Cette structure est utilisée pour gérer un Activite. Les champs de cette structure doivent être modifiés ou lus par les accesseurs et mutateurs. Ils doivent être initialisés et libérés avec les fonctions prévus à cette effet
 */
struct sActivite {
  unsigned int id; /** */
  Personne * personne; /** */
  char * activite; /** */
  char principal; /** */
  char maj;
  char sup;
};
/**
 * @typedef Activite
 * @brief Redéfinit la structure sActivite
 */
	typedef struct sActivite Activite;

/* *********************************************************************

           Accesseurs et Mutateurs de la structure Activite               

********************************************************************* */

/**
 * @fn void init_Act(Activite *activite);
 * @brief Initialise une activite
 * 
 * @param[in,out] activite
 */
void init_Act(Activite * activite) ;

/**
 * @fn void liberer_Act(Activite *activite);
 * @brief Libere une activite
 *
 * @param[in,out] activite
 */
void liberer_Act(Activite *activite);

/**
 * @fn Activite *creer_Act() ;
 * @brief Initialise une activite.
 *
 * @return un pointeur sur une Activite initialisé en mémoire
 */
void *creer_Act() ;


/**
 * @fn void detruire_Act(Activite *pActivite)
 * @brief Libere la structure activite.
 *
 * @param[in, out] pActivite Pointeur vers l'activite à detruire.
 */
void detruire_Act(Activite **pActivite) ;

/**
 * @fn void copier_Act(Activite *dest, const Activite *src);
 * @brief Copie le contenu de src dans dest
 *
 * @param[in,out] dest est l'activite de destination
 * @param src
 */
void copier_Act(Activite **dest, const Activite *src);

/**
 * @fn unsigned int getId_Act(const Activite * ptr) ;
 * @brief 
 *
 * @param ptr pointeur vers Activite
 * @return unsigned int
 */
unsigned int getId_Act(const Activite * ptr) ;

/**
 * @fn void setId_Act(Activite *ptr, const unsigned int val) ;
 * @brief Modifie .
 *
 * @param[in,out] ptr Pointeur vers Activite.
 * @param val.
 */
void setId_Act(Activite *ptr, const unsigned int val) ;

/**
 * @fn Personne * getPersonne_Act(const Activite * ptr) ;
 * @brief 
 *
 * @param ptr pointeur vers Activite
 * @return Personne *
 */
Personne * getPersonne_Act(const Activite * ptr) ;

/**
 * @fn void setPersonne_Act(Activite *ptr, const Personne * val) ;
 * @brief Modifie .
 *
 * @param[in,out] ptr Pointeur vers Activite.
 * @param val.
 */
void setPersonne_Act(Activite *ptr, const Personne * val) ;

/**
 * @fn char * getActivite_Act(const Activite * ptr) ;
 * @brief 
 *
 * @param ptr pointeur vers Activite
 * @return char *
 */
char * getActivite_Act(const Activite * ptr) ;

/**
 * @fn void setActivite_Act(Activite *ptr, const char * val) ;
 * @brief Modifie .
 *
 * @param[in,out] ptr Pointeur vers Activite.
 * @param val.
 */
void setActivite_Act(Activite *ptr, const char * val) ;

/**
 * @fn char getPrincipal_Act(const Activite * ptr) ;
 * @brief 
 *
 * @param ptr pointeur vers Activite
 * @return char
 */
char getPrincipal_Act(const Activite * ptr) ;

/**
 * @fn void setPrincipal_Act(Activite *ptr, const char val) ;
 * @brief Modifie .
 *
 * @param[in,out] ptr Pointeur vers Activite.
 * @param val.
 */
void setPrincipal_Act(Activite *ptr, const char val) ;

/**
 * @fn void setMaj_Act(Activite *ptr, const char b);
 * @brief Set le besoin de faire une mise à jour, ou pas
 * 
 * @param[in,out] ptr
 * @parm b
 */
void setMaj_Act(Activite *ptr, const char b);

/**
 * @fn char getMaj_Act(const Activite *ptr);
 * @brief Retourne 0 si pas besoin de faire la mise à jour, et 1 sinon
 *
 * @param ptr
 * @return Comme un boolean
 */
char getMaj_Act(const Activite *ptr);

/**
 * @fn void setSup_Act(Activite *ptr, const char b);
 * @brief Set le besoin de le supprimer, ou pas
 * 
 * @param[in,out] ptr
 * @parm b
 */
void setSup_Act(Activite *ptr, const char b);

/**
 * @fn char getSup_Act(const Activite *ptr);
 * @brief Retourne 0 si pas besoin de le supprimer, et 1 sinon
 *
 * @param ptr
 * @return Comme un boolean
 */
char getSup_Act(const Activite *ptr);


#endif
